package com.cg.baseproject.algorithm.searches;

class Test
{
	// Array of items on which search will
	// be conducted.
	static int arr[] = new int[]{10, 12, 13, 16, 18, 19, 20, 21, 22, 23,
										24, 33, 35, 42, 47};
	
	// If x is present in arr[0..n-1], then returns
	// index of it, else returns -1.
	static int interpolationSearch(int x)
	{
		// Find indexes of two corners
		int lo = 0, hi = (arr.length - 1);
	
		// Since array is sorted, an element present
		// in array must be in range defined by corner
		while (lo <= hi && x >= arr[lo] && x <= arr[hi])
		{
			// Probing the position with keeping
			// uniform distribution in mind.
			int pos = lo + (((hi-lo) /
				(arr[hi]-arr[lo]))*(x - arr[lo]));
	
			// Condition of target found
			if (arr[pos] == x)
				return pos;
	
			// If x is larger, x is in upper part
			if (arr[pos] < x)
				lo = pos + 1;
	
			// If x is smaller, x is in lower part
			else
				hi = pos - 1;
		}
		return -1;
	}

	// Driver method 
	public static void main(String[] args) 
	{
		int x = 18; // Element to be searched
		int index = interpolationSearch(x);
		
		// If element was found
		if (index != -1)
			System.out.println("Element found at index " + index);
		else
			System.out.println("Element not found.");
	}
}

